কনকারেন্সি (Concurrency) এবং অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং (Asynchronous Programming) C++11 এবং পরবর্তী সংস্করণে প্রবর্তিত এমন দুটি ধারণা, যা প্রোগ্রামকে কার্যকরভাবে সমান্তরাল (parallel) এবং অ্যাসিঙ্ক্রোনাসভাবে কাজ করতে সহায়ক করে।
কনকারেন্সি হলো এমন একটি প্রক্রিয়া, যেখানে একই সময়ে একাধিক কাজ চালানোর মাধ্যমে প্রোগ্রামের কার্যকারিতা বাড়ানো যায়। C++ এ কনকারেন্সির জন্য থ্রেড (thread) ব্যবহৃত হয়। কনকারেন্ট প্রোগ্রামিংয়ের মাধ্যমে একই সময়ে একাধিক থ্রেডের মাধ্যমে কাজ করা যায়।
#include <iostream>
#include <thread>
using namespace std;
void task1() {
for (int i = 0; i < 5; i++) {
cout << "Task 1 - iteration " << i << endl;
}
}
void task2() {
for (int i = 0; i < 5; i++) {
cout << "Task 2 - iteration " << i << endl;
}
}
int main() {
thread t1(task1); // থ্রেড t1 তৈরি করা যা task1 চালাবে
thread t2(task2); // থ্রেড t2 তৈরি করা যা task2 চালাবে
t1.join(); // মূল থ্রেড t1 শেষ হওয়ার জন্য অপেক্ষা করবে
t2.join(); // মূল থ্রেড t2 শেষ হওয়ার জন্য অপেক্ষা করবে
return 0;
}
বর্ণনা:
task1
এবং task2
নামে দুটি ফাংশন তৈরি করা হয়েছে, যেগুলো আলাদা আলাদা থ্রেডে চালানো হয়েছে।t1.join()
এবং t2.join()
দ্বারা মূল থ্রেড অপেক্ষা করে যে t1
এবং t2
থ্রেড শেষ হয়ে যাবে।অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং হলো এমন একটি প্রক্রিয়া, যেখানে একটি কাজ চলতে চলতেই অন্য কাজ শুরু করা যায় এবং কাজের ফলাফল প্রাপ্তির জন্য অপেক্ষা না করেই অন্যান্য কাজ চালানো সম্ভব হয়। C++11 থেকে std::async
এবং std::future
ব্যবহার করে অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং করা যায়।
async
এবং future
ব্যবহার#include <iostream>
#include <future>
using namespace std;
// সময়সাপেক্ষ ফাংশন
int timeConsumingTask(int x) {
this_thread::sleep_for(chrono::seconds(2)); // ২ সেকেন্ড বিরতি
return x * x;
}
int main() {
cout << "Starting async task..." << endl;
// অ্যাসিঙ্ক্রোনাসলি `timeConsumingTask` চালানো হচ্ছে
future<int> result = async(timeConsumingTask, 5);
// এই সময়ে অন্য কাজ করা যেতে পারে
cout << "Doing other tasks while waiting for async result..." << endl;
// অ্যাসিঙ্ক্রোনাস কাজের ফলাফল পাওয়া
cout << "Async task result: " << result.get() << endl;
return 0;
}
বর্ণনা:
timeConsumingTask
একটি ফাংশন, যা অ্যাসিঙ্ক্রোনাসভাবে চালানো হচ্ছে।async
ব্যবহার করে timeConsumingTask
ফাংশনটি অ্যাসিঙ্ক্রোনাসভাবে চালানো হয়েছে এবং এর রিটার্ন ভ্যালু future<int>
টাইপের result
এ সংরক্ষিত।result.get()
ব্যবহার করে অ্যাসিঙ্ক্রোনাস কাজের ফলাফল পাওয়া যায়।std::future
এবং std::promise
ব্যবহারstd::future
ব্যবহার করে অ্যাসিঙ্ক্রোনাস কাজের ফলাফল পরিচালনা করা যায় এবং std::promise
এর মাধ্যমে অ্যাসিঙ্ক্রোনাস কাজের রিটার্ন ভ্যালু সেট করা যায়।
std::promise
এবং std::future
ব্যবহার#include <iostream>
#include <thread>
#include <future>
using namespace std;
void calculateSquare(promise<int> &&p, int x) {
this_thread::sleep_for(chrono::seconds(2)); // ২ সেকেন্ড বিরতি
p.set_value(x * x); // কাজ শেষে ভ্যালু সেট করা
}
int main() {
promise<int> p;
future<int> result = p.get_future();
thread t(calculateSquare, move(p), 5);
cout << "Calculating square asynchronously..." << endl;
cout << "Square result: " << result.get() << endl; // result.get() দিয়ে ফলাফল পাওয়া যায়
t.join();
return 0;
}
বর্ণনা:
promise
এবং future
ব্যবহার করে অ্যাসিঙ্ক্রোনাস কাজের ফলাফল হ্যান্ডল করা হয়েছে।promise<int> p;
এবং future<int> result = p.get_future();
ব্যবহার করে result
এ কাজের ফলাফল পাওয়া গেছে।টুল | বিবরণ |
---|---|
thread | C++ এ থ্রেড তৈরি এবং চালানোর জন্য ব্যবহৃত হয়, যা একাধিক কাজকে কনকারেন্টলি চালাতে পারে। |
mutex | একাধিক থ্রেডের মধ্যে ডেটা সুরক্ষিত রাখার জন্য ব্যবহৃত হয়, যা ডেটা রেস সমস্যা প্রতিরোধ করে। |
async | অ্যাসিঙ্ক্রোনাস কাজের জন্য ব্যবহৃত হয়, যেখানে কাজটি এক্সিকিউট হয়ে ফলাফল ফিরে আসা পর্যন্ত অন্য কাজ চালানো যেতে পারে। |
future | অ্যাসিঙ্ক্রোনাস কাজের ফলাফল ধরার জন্য ব্যবহৃত হয়, যা কাজ শেষ হলে ফলাফল প্রদান করে। |
promise | future এর সাথে ব্যবহার করে অ্যাসিঙ্ক্রোনাস কাজের রিটার্ন ভ্যালু সেট করে। |
condition_variable | থ্রেডের মধ্যে যোগাযোগের জন্য ব্যবহৃত হয়, যেখানে থ্রেড একটি নির্দিষ্ট শর্তের জন্য অপেক্ষা করে এবং শর্ত পূরণ হলে কাজ শুরু করে। |
async
, future
, এবং promise
ব্যবহার করে করা হয়।কনকারেন্সি এবং অ্যাসিঙ্ক্রোনাস প্রোগ্রামিংয়ের মাধ্যমে C++ প্রোগ্রামিংয়ে কার্যকারিতা এবং ব্যবহারকারীর অভিজ্ঞতা উন্নত করা যায়, যা বড় প্রোগ্রামিং প্রকল্পে অত্যন্ত কার্যকর।